package com.nageoffer.jobtrain.admin.common.biz.user;

import com.alibaba.ttl.TransmittableThreadLocal;
import com.nageoffer.jobtrain.common.toolkit.biz.user.UserInfoDTO;

import java.util.Optional;

/**
 * 用户上下文 - 使用 TTL（ThreadLocal） 进行存储用户信息
 * 拦截器拦截时，
 */
public final class UserContext {
    private static final ThreadLocal<UserInfoDTO> ADMIN_USER_THREAD_LOCAL = new TransmittableThreadLocal<>();

    /**
     * 设置管理员用户至上下文
     *
     * @param user 管理员用户详情信息
     */
    public static void setAdminUser(UserInfoDTO user) {
        ADMIN_USER_THREAD_LOCAL.set(user);
    }

    /**
     * 获取上下文中管理员用户 ID
     *
     * @return 管理员用户 ID
     */
    public static String getAdminUserId() {
        UserInfoDTO userInfoDTO = ADMIN_USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getId).orElse(null);
    }

    /**
     * 获取上下文中管理员用户名称
     *
     * @return 管理员用户名称
     */
    public static String getAdminUsername() {
        UserInfoDTO userInfoDTO = ADMIN_USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getUsername).orElse(null);
    }

    /**
     * 清理管理员用户上下文
     */
    public static void removeAdminUser() {
        ADMIN_USER_THREAD_LOCAL.remove();
    }
}